package com.xudm.cdg.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface RedisService {
    /**
     * 保存key 带时间
     */
    void set(String key, Object value, long time);


    void setStr(String key, String value, long time);

    /**
     * 保存key 不带时间
     */
    void set(String key, Object value);

    /**
     * 获取key，对象对OBJECT
     */
    Object get(String key);

    /**
     * 获取key
     */
    <T> T get(String key, Class<T> clazz);

    /**
     * 删除key
     */
    Boolean del(String key);

    /**
     * 批量删除key
     */
    Long del(List<String> keys);

    /**
     * 设置过期时间
     */
    Boolean expire(String key, long time);

    /**
     * 获取过期时间
     */
    Long getExpire(String key);

    /**
     * 判断是否有该key
     */
    Boolean hasKey(String key);

    /**
     * 按delta递增
     */
    Long incr(String key, long delta);

    /**
     * 按delta递减
     */
    Long decr(String key, long delta);

    /**
     * 获取Hash结构中的属性
     */
    Object hGet(String key, String hashKey);

    /**
     * 向Hash结构中放入一个属性
     */
    Boolean hSet(String key, String hashKey, Object value, long time);

    /**
     * 向Hash结构中放入一个属性
     */
    void hSet(String key, String hashKey, Object value);

    /**
     * 直接获取整个Hash结构
     */
    Map<Object, Object> hGetAll(String key);

    /**
     * 直接设置整个Hash结构
     */
    Boolean hSetAll(String key, Map<String, Object> map, long time);

    /**
     * 直接设置整个Hash结构
     */
    void hSetAll(String key, Map<String, ?> map);

    /**
     * 删除Hash结构中的属性
     */
    void hDel(String key, Object... hashKey);

    /**
     * 判断Hash结构中是否有该属性
     */
    Boolean hHasKey(String key, String hashKey);

    /**
     * Hash结构中属性递增
     */
    Long hIncr(String key, String hashKey, Long delta);

    /**
     * Hash结构中属性递减
     */
    Long hDecr(String key, String hashKey, Long delta);

    /**
     * 获取Set结构
     */
    Set<Object> sMembers(String key);

    /**
     * 向Set结构中添加key
     */
    Long sAdd(String key, Object... values);

    /**
     * 向Set结构中添加key
     */
    Long sAdd(String key, long time, Object... values);

    /**
     * 是否为Set中的key
     */
    Boolean sIsMember(String key, Object value);

    /**
     * 获取Set结构的长度
     */
    Long sSize(String key);

    /**
     * 删除Set结构中的key
     */
    Long sRemove(String key, Object... values);

    /**
     * 获取List结构中的key
     */
    List<Object> lRange(String key, long start, long end);

    /**
     * 获取List结构的长度
     */
    Long lSize(String key);

    /**
     * 根据索引获取List中的key
     */
    Object lIndex(String key, long index);

    /**
     * 向List结构中添加key
     */
    Long lPush(String key, Object value);

    /**
     * 向List结构中添加key
     */
    Long lPush(String key, Object value, long time);

    /**
     * 向List结构中批量添加key
     */
    Long lPushAll(String key, Object... values);

    /**
     * 向List结构中批量添加key
     */
    Long lPushAll(String key, Long time, Object... values);

    /**
     * 从List结构中移除key
     */
    Long lRemove(String key, long count, Object value);

    /**
     * 保存key 带时间 带锁
     */
    boolean setNx(String key, Object value, long expireSeconds);

    /**
     * 扫描键 根据传入的参数
     */
    List<String> scanKeys(String pattern);
}
